import type { App } from 'vue'


// 使用Vite特有的import.meta.glob API进行模块批量导入
// './**/*' 表示匹配当前目录及所有子目录下的文件
// { eager: true } 表示立即加载所有匹配模块（构建时处理）
const modules = import.meta.glob('./**/*', { eager: true })

// 安装方法，执行某一类相同操作
function install (app: App<Element>) {
     // 遍历所有动态导入的模块
     Object.keys(modules).forEach((key) => {

        // 从文件路径中提取组件/插件名称（去除路径和扩展名）
        const name = key.replace(/(.*\/)*([^.]+).*/gi, '$2')

        // 从路径中提取类型分类（directives/plugins）
        const type = key.replace(/^\.\/([\w-]+).*/gi, '$1') 

        // 获取模块内容（使用any类型绕过严格类型检查）
        const module: any = modules[key]
        
        // 只处理包含默认导出的模块
        if (module.default) {
            switch (type) {
                // 注册全局指令
                case 'directives':
                    // app.directive(name, module.default)
                    break
                // 初始化插件
                case 'plugins':
                    // 确保插件是函数类型才执行
                    typeof module.default === 'function' && module.default(app)
                    break
            }
        }
    })
}

export default {
    install
}